package top.ninwoo.utils.service;


import org.springframework.scheduling.annotation.Scheduled;
import top.ninwoo.common.entity.DockerContainer;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface DockerService {
    void addNewContainerId(DockerContainer newContainer);

    /**
     * 启动一个Docker容器
     * @param container
     * @return
     */
    DockerContainer runDocker(DockerContainer container);

    /**
     * 获取容器状态
     * @param containerId
     * @return
     */
    ContainerStatus getContainerStatus(String containerId);

    List<DockerContainer> getAllContainers();

    /**
     * 获取存活的Docker列表
     * @return
     */
    List<DockerContainer> getRunningContainers();

    /**
     * 获取容器数量
     * @param isAll 是否包含停止的容器
     * @return
     */
    int getContainersNumber(boolean isAll);

    String deleteDockerByName(String name);

    /**
     * 通过容器id关闭容器
     * @param id
     * @return
     */
    boolean deleteDockerById(String id);

    /**
     * 批量关闭docker容器
     * @param ids
     * @return
     */
    boolean deleteDockerByIds(List<String> ids);

    /**
     * 更新Docker容器列表
     * 这是一个定时任务
     */
    void addNewContainers();

    /**
     * 检查map中docker的运行状态
     * 这是一个定时任务
     */
    void delExitedContainers();

    /**
     * 检查docker容器状态
     * @param containerId
     * @return
     */
    ContainerStatus checkContainerStatus(String containerId);

    /**
     * 通过docker容器id获取容器详情
     * TODO: DockerContainer需要补充一个容器状态
     * @param id
     * @return
     */
    DockerContainer getDockerById(String id);

    /**
     * 初始化当前的容器信息
     */
    void init();

    boolean hasRunningContainer(String containerId);

    String execInDocker(String containerId, String args);

    String execInDocker(String containerId, String[] args);
}
